package com.demo.app.sort;


/**
 * @program: couple-game
 * @description: 随机函数练习
 * @author: fbl
 * @create: 2025-05-14 10:08
 **/
public class RandomMethod {
    public static void main(String[] args) {
        double nums = 10000;
        double count = 0;
        for (int i = 0; i < nums; i++) {
            if (Math.random() < 0.3) {
                count++;
            }
        }
        System.out.println(count / nums);

        System.out.println("==============");
        // 给你一组等概率随机数字 例如 1 - 5，得到另一组等概率的随机数字 例如 1 - 7
        int[] ints = new int[8];
        for (int i = 0; i < nums; i++) {
            int ans = g();
            ints[ans]++;
        }

        for (int i = 0; i < ints.length; i++) {
            System.out.println(i + "这个数字出现了" + ints[i] + "次");
        }
    }

    // 从 1-5 随机 到 1-7 随机
    // 1-5 随机
    private static int f() {
        return (int) (Math.random() * 5) + 1;
    }

    // 将 1-5 随机 转换为 0 1 随机
    private static int f1() {
        // 1、2 为 0，3 重做，4、5 为 1
        int f;
        do {
            f = f();
        }
        while (f == 3);
        return f < 3 ? 0 : 1;
    }

    // 得到 0-7 随机数
    // 用二进制的思想 000 ->0 001 ->1 010 ->2 011 ->3 100 ->4 101 ->5 110 ->6 111 ->7
    private static int f2() {
        return (f1() << 2) + (f1() << 1) + f1();
    }

    // 得到 1-7 随机数
    private static int g() {
        int g;
        do {
            g = f2();
        }
        while (g == 0);
        return g;
    }

}
